/**
 * state / mutaion / action / ...
 */

function createData ({page = 1, size = 5}) {
  return new Promise((resolve, reject) => {
    const data = ['1', 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    resolve({
      code: 0,
      msg: '成功',
      data: data.filter((v, i) => i < page * size && i >= (page - 1) * size)
    })
  })
}

// createData({}).then(res => {
//   console.log('res:', res)
// })

export default {

  // 命名空间
  namespace: 'example',
  // 仓库
  state: {
    token: '我是token',
    list: []
  },
  // 监听 （）
  subscriptions: {
    setup({ dispatch, history }) {  // eslint-disable-line
    },
  },
  // 异步处理，相当于 vuex action (* generatar函数)
  // call 发起接口调用使用
  // put 类似于dispatch (commit)
  effects: {
    *fetch({ payload }, { call, put }) {  // eslint-disable-line
      yield put({ type: 'save' });
    },
    *getList({ payload: { page, size } }, {call, put}) {
      // console.log('psage:', payload)
      // call的第一个参数，是放置异步函数名字，第二个参数，是当前这个异步函数的参数
      const data = yield call(createData, {page, size})
      put({
        type: 'saveList',
        payload: data
      })
      // 这个return可以让dipatch在调用提交函数的时候，通过.then获取结果
      return data
    }
  },

  reducers: { // reducer纯函数
    save(state, action) {
      return { ...state, ...action.payload };
    },
    saveList(state, action) {
      return {...state, list: action.payload}
    }
  },

};
